import { ApiProperty } from "@nestjs/swagger";
import { IsIn, IsNumber, IsOptional, IsPositive, Max, Min } from "class-validator";

export class FilterAccountDTO {
    @ApiProperty({
        type: String,
        description: "Имя (логин) пользователя, должно быть уникальным",
        example: "admin",
        required: false
    })
    @IsOptional()
    userName?: string;

    @ApiProperty({
        type: String,
        description: "Имя пользователя",
        example: "Иван",
        required: false
    })
    @IsOptional()
    firstName?: string;

    @ApiProperty({
        type: String,
        description: "Фамилия пользователя",
        example: "Иванов",
        required: false
    })
    @IsOptional()
    lastName?: string;

    @ApiProperty({
        type: String,
        description: "Электронная почта пользователя",
        example: "ivan.ivanov@example.ru",
        required: false
    })
    @IsOptional()
    email?: string;

    @ApiProperty({
        type: String,
        description:
            "Поле, по которому сортировать результаты. Возможные значения: id, userName, firstName, lastName, email, createdAt, updatedAt, isBlocked, needChangePassword",
        example: "id",
        default: "id",
        required: false
    })
    @IsOptional()
    @IsIn([
        "id",
        "userName",
        "firstName",
        "lastName",
        "email",
        "createdAt",
        "updatedAt",
        "isBlocked",
        "needChangePassword"
    ])
    sortBy?: string = "id";

    @ApiProperty({
        type: String,
        description: "Направление сортировки. Возможные значения: ASC (по возрастанию), DESC (по убыванию)",
        example: "ASC",
        default: "ASC",
        required: false
    })
    @IsOptional()
    @IsIn(["ASC", "DESC"])
    sortDirection?: string = "ASC";

    @ApiProperty({
        type: String,
        description: "Смещение от первой записи в выборке",
        example: 0,
        default: 0,
        minimum: 0,
        required: false
    })
    @IsOptional()
    @IsNumber()
    @Min(0)
    offset?: number = 0;

    @ApiProperty({
        type: String,
        description: "Количесво записей для возврата",
        example: 10,
        default: 10,
        maximum: 100,
        required: false
    })
    @IsOptional()
    @IsPositive()
    @Max(100)
    limit: number = 10;
}
